package cn.hinglo.common.utils;

import cn.hinglo.common.entity.Result;
import cn.hinglo.common.enums.ExceptionEnum;
import cn.hutool.json.JSONUtil;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;


/**
 * @createTime: 2018/1/3
 * @author: HingLo
 * @description: 结果值返回类型定义
 */
public class ResultUtils {

    /**
     * 请求成功
     *
     * @param object 请求成功返回的值
     * @return 操作结果
     */
    public static Result<Object> success(Object object) {
        return new Result<>(200, "操作成功", object);
    }

    /**
     * 默认成功的方法，不需要返回参数
     *
     * @return 结果值
     */
    public static Result<Object> success() {
        return success(null);
    }

    /**
     * 请求失败，传入失败code,与信息
     *
     * @param code 错误码
     * @param msg  消息内容
     * @return 操作结果
     */
    public static Result<Object> error(Integer code, String msg) {
        return new Result<>(code, msg, null);
    }

    /**
     * 错误信息，返回默认的-1 代码，提示信息自定义
     *
     * @param msg 消息对象
     * @return 返回结果
     */
    public static Result<Object> error(String msg) {
        return new Result<>(-1, msg, null);
    }

    /**
     * 重载error方法，传入一个枚举类型，
     *
     * @param exceptionEnum 异常的枚举对象
     * @return 返回结果
     */
    public static Result<Object> error(ExceptionEnum exceptionEnum) {
        return new Result<>(exceptionEnum.getCode(), exceptionEnum.getMessage(), null);
    }

    /**
     * 拦截器重未通过，就返回响应的消息
     *
     * @param response 响应对象
     * @throws IOException IO异常
     */
    public static void error(HttpServletResponse response) throws IOException {
        resp(response, error("token失效,请重新登录"));
    }

    /**
     * 拦截器重未通过，就返回响应的消息
     *
     * @param response 响应对象
     * @throws IOException IO异常
     */
    public static void error(HttpServletResponse response, Result result) throws IOException {
        resp(response, result);
    }

    /**
     * 拦截器重未通过，就返回响应的消息
     *
     * @param response 响应对象
     * @throws IOException IO异常
     */
    public static void error(HttpServletResponse response, ExceptionEnum exceptionEnum) throws IOException {
        resp(response, error(exceptionEnum));
    }

    /**
     * 响应内容
     *
     * @param response response
     * @param result   返回值
     * @throws IOException out
     */
    public static void resp(HttpServletResponse response, Object result) throws IOException {
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/json;charset=UTF-8");
        PrintWriter out;
        out = response.getWriter();
        out.println(JSONUtil.toJsonStr(result));
    }
}
